package service

import (
	"go-0650-blog-grom/dao/mysql"
	"go-0650-blog-grom/models"
	"go-0650-blog-grom/myUtil/jwt"
	"go-0650-blog-grom/myUtil/snowflake"
)

type UserService struct {
}

/**
 * @Author SSWANG
 * @Description //TODO 存放注册业务逻辑的代码
 * @Date 21:43 2022/10/27
 **/
func (con UserService) SignUp(signForm *models.SignForm) (error error) {
	// 1、判断用户存不存在
	err := mysql.UserMapper{}.CheckUserExist(signForm.UserName)
	if err != nil {
		// 数据库查询出错
		return err
	}

	// 2、生成UID  --  snowflake是包名，GetID()是 gen_id.go 中的方法
	userId, err := snowflake.GetID()
	if err != nil {
		return mysql.ErrorGenIDFailed
	}
	// 构造一个User实例  --  因为不涉及到对 user 的修改，因此不必使用指针类型
	user := models.User{
		UserID:   userId,
		UserName: signForm.UserName,
		Password: signForm.Password,
	}
	// 3、保存进数据库
	return mysql.UserMapper{}.InsertUser(user)
}

/**
 * @Author SSWANG
 * @Description //TODO 存放登录业务逻辑代码
 * @Date 14:38 2022/10/28
 **/
func (con UserService) Login(loginForm *models.LoginForm, aTokenString *string, rTokenString *string) (user *models.User, error error) {
	user = &models.User{
		UserName: loginForm.UserName,
		Password: loginForm.Password,
	}
	if err := mysql.Login(user); err != nil {
		return nil, err
	}
	// 生成JWT
	//return jwt.GenToken(user.UserID,user.UserName)
	atoken, rtoken, err := jwt.GenToken(user.UserID, user.UserName)
	if err != nil {
		return
	}

	*aTokenString = atoken
	*rTokenString = rtoken

	return
}
